<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Transform an Attribute to a Different Type (Qi and Karma)</title>
<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="../../../index.html" title="Spirit 2.5.8">
<link rel="up" href="../customize.html" title="Customization of Spirit's Attribute Handling">
<link rel="prev" href="handles_container.html" title="Determine Whether a Component Handles Container Attributes (Qi and Karma)">
<link rel="next" href="assign_to.html" title="Store a Parsed Attribute Value (Qi)">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="handles_container.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../customize.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="assign_to.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h4 class="title">
<a name="spirit.advanced.customize.transform"></a><a class="link" href="transform.html" title="Transform an Attribute to a Different Type (Qi and Karma)">Transform an Attribute
        to a Different Type (Qi and Karma)</a>
</h4></div></div></div>
<h6>
<a name="spirit.advanced.customize.transform.h0"></a>
          <span class="phrase"><a name="spirit.advanced.customize.transform.transform_attribute"></a></span><a class="link" href="transform.html#spirit.advanced.customize.transform.transform_attribute">transform_attribute</a>
        </h6>
<p>
          The template <code class="computeroutput"><span class="identifier">transform_attribute</span></code>
          is a type used as an attribute customization point. It is invoked by <span class="emphasis"><em>Qi</em></span>
          <code class="computeroutput"><span class="identifier">rule</span></code>, semantic action and
          <code class="computeroutput"><span class="identifier">attr_cast</span></code>, and <span class="emphasis"><em>Karma</em></span>
          <code class="computeroutput"><span class="identifier">rule</span></code>, semantic action and
          <a class="link" href="../../karma/reference/auxiliary/attr_cast.html" title="Attribute Transformation Pseudo Generator (attr_cast)"><code class="computeroutput"><span class="identifier">attr_cast</span></code></a>. It is used to automatically
          transform the user provided attribute to the attribute type expected by
          the right hand side component (for <code class="computeroutput"><span class="identifier">rule</span></code>),
          the semantic action, or the embedded component (for <code class="computeroutput"><span class="identifier">attr_cast</span></code>).
        </p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td align="left" valign="top"><p>
            The interface of this customization point has been changed with Boost
            V1.44. We added the <code class="computeroutput"><span class="identifier">Domain</span></code>
            template parameter to allow for more fine grained specializations for
            <span class="emphasis"><em>Spirit.Qi</em></span> and <span class="emphasis"><em>Spirit.Karma</em></span>.
          </p></td></tr>
</table></div>
<h6>
<a name="spirit.advanced.customize.transform.h1"></a>
          <span class="phrase"><a name="spirit.advanced.customize.transform.module_headers"></a></span><a class="link" href="transform.html#spirit.advanced.customize.transform.module_headers">Module Headers</a>
        </h6>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">home</span><span class="special">/</span><span class="identifier">support</span><span class="special">/</span><span class="identifier">attributes</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
</pre>
<p>
          Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</a>.
        </p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td align="left" valign="top"><p>
            This header file does not need to be included directly by any user program
            as it is normally included by other Spirit header files relying on its
            content.
          </p></td></tr>
</table></div>
<h6>
<a name="spirit.advanced.customize.transform.h2"></a>
          <span class="phrase"><a name="spirit.advanced.customize.transform.namespace"></a></span><a class="link" href="transform.html#spirit.advanced.customize.transform.namespace">Namespace</a>
        </h6>
<div class="informaltable"><table class="table">
<colgroup><col></colgroup>
<thead><tr><th>
                  <p>
                    Name
                  </p>
                </th></tr></thead>
<tbody><tr><td>
                  <p>
                    <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">traits</span></code>
                  </p>
                </td></tr></tbody>
</table></div>
<h6>
<a name="spirit.advanced.customize.transform.h3"></a>
          <span class="phrase"><a name="spirit.advanced.customize.transform.synopsis"></a></span><a class="link" href="transform.html#spirit.advanced.customize.transform.synopsis">Synopsis</a>
        </h6>
<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Exposed</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Transformed</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Domain</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Enable</span><span class="special">&gt;</span>
<span class="keyword">struct</span> <span class="identifier">transform_attribute</span>
<span class="special">{</span>
    <span class="keyword">typedef</span> <span class="special">&lt;</span><span class="identifier">unspecified</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>

    <span class="keyword">static</span> <span class="identifier">type</span> <span class="identifier">pre</span><span class="special">(</span><span class="identifier">Exposed</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">);</span>
    <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">post</span><span class="special">(</span><span class="identifier">Exposed</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="identifier">type</span> <span class="identifier">attr</span><span class="special">);</span>    <span class="comment">// Qi only</span>
    <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">fail</span><span class="special">(</span><span class="identifier">Exposed</span><span class="special">&amp;);</span>                   <span class="comment">// Qi only</span>
<span class="special">};</span>
</pre>
<h6>
<a name="spirit.advanced.customize.transform.h4"></a>
          <span class="phrase"><a name="spirit.advanced.customize.transform.template_parameters"></a></span><a class="link" href="transform.html#spirit.advanced.customize.transform.template_parameters">Template
          parameters</a>
        </h6>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead><tr>
<th>
                  <p>
                    Parameter
                  </p>
                </th>
<th>
                  <p>
                    Description
                  </p>
                </th>
<th>
                  <p>
                    Default
                  </p>
                </th>
</tr></thead>
<tbody>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">Exposed</span></code>
                  </p>
                </td>
<td>
                  <p>
                    The attribute type supplied to the component which needs to be
                    transformed.
                  </p>
                </td>
<td>
                  <p>
                    none
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">Transformed</span></code>
                  </p>
                </td>
<td>
                  <p>
                    The attribute type expected by the component to be provided as
                    the result of the transformation.
                  </p>
                </td>
<td>
                  <p>
                    none
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">Domain</span></code>
                  </p>
                </td>
<td>
                  <p>
                    The domain of the sub library the template is instantiated in.
                    Typically this is either <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">domain</span></code>
                    or <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">domain</span></code>.
                  </p>
                </td>
<td>
                  <p>
                    none
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">Enable</span></code>
                  </p>
                </td>
<td>
                  <p>
                    Helper template parameter usable to selectively enable or disable
                    certain specializations of <code class="computeroutput"><span class="identifier">transform_attribute</span></code>
                    utilizing SFINAE (i.e. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span></code>
                    or <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">disable_if</span></code>).
                  </p>
                </td>
<td>
                  <p>
                    <code class="computeroutput"><span class="keyword">void</span></code>
                  </p>
                </td>
</tr>
</tbody>
</table></div>
<div class="variablelist">
<p class="title"><b>Notation</b></p>
<dl class="variablelist">
<dt><span class="term"><code class="computeroutput"><span class="identifier">Exposed</span></code></span></dt>
<dd><p>
                The type, <code class="computeroutput"><span class="identifier">Exposed</span></code>
                is the type of the attribute as passed in by the user.
              </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">Transformed</span></code></span></dt>
<dd><p>
                The type, <code class="computeroutput"><span class="identifier">Transformed</span></code>
                is the type of the attribute as passed along to the right hand side
                of the <code class="computeroutput"><span class="identifier">rule</span></code> (embedded
                component of <code class="computeroutput"><span class="identifier">attr_cast</span></code>).
              </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">Domain</span></code></span></dt>
<dd><p>
                The domain of the sub library the template is instantiated in. Typically
                this is either <code class="computeroutput"><span class="identifier">qi</span><span class="special">::</span><span class="identifier">domain</span></code>
                or <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">domain</span></code>.
              </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">exposed</span></code></span></dt>
<dd><p>
                An instance of type <code class="computeroutput"><span class="identifier">Exposed</span></code>.
              </p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">transformed</span></code></span></dt>
<dd><p>
                An instance of type <code class="computeroutput"><span class="identifier">Transformed</span></code>.
              </p></dd>
</dl>
</div>
<h6>
<a name="spirit.advanced.customize.transform.h5"></a>
          <span class="phrase"><a name="spirit.advanced.customize.transform.expression_semantics"></a></span><a class="link" href="transform.html#spirit.advanced.customize.transform.expression_semantics">Expression
          Semantics</a>
        </h6>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
                  <p>
                    Expression
                  </p>
                </th>
<th>
                  <p>
                    Semantics
                  </p>
                </th>
</tr></thead>
<tbody>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">transform_attribute</span><span class="special">&lt;</span><span class="identifier">Exposed</span><span class="special">,</span> <span class="identifier">Transformed</span><span class="special">,</span> <span class="identifier">Domain</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
                  </p>
                </td>
<td>
                  <p>
                    Evaluates to the type to be used as the result of the transformation
                    (to be passed to the right hand side of the <code class="computeroutput"><span class="identifier">rule</span></code>
                    or to the embedded component of the <code class="computeroutput"><span class="identifier">attr_cast</span></code>.
                    Most of the time this is equal to <code class="computeroutput"><span class="identifier">Transformed</span></code>,
                    but in other cases this might evaluate to <code class="computeroutput"><span class="identifier">Transformed</span><span class="special">&amp;</span></code> instead avoiding superfluous
                    object creation.
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">type</span> <span class="identifier">transform_attribute</span><span class="special">&lt;</span><span class="identifier">Exposed</span><span class="special">,</span> <span class="identifier">Transformed</span><span class="special">,</span> <span class="identifier">Domain</span><span class="special">&gt;::</span><span class="identifier">pre</span><span class="special">(</span><span class="identifier">exposed</span><span class="special">)</span></pre>
<p>
                  </p>
                </td>
<td>
                  <p>
                    Do <code class="computeroutput"><span class="identifier">pre</span></code>-transformation
                    before invoking the right hand side component for <code class="computeroutput"><span class="identifier">rule</span></code> (or the embedded component
                    for <code class="computeroutput"><span class="identifier">attr_cast</span></code>).
                    This takes the attribute supplied as by the user (of type <code class="computeroutput"><span class="identifier">Exposed</span></code>) and returns the attribute
                    to be passed down the component hierarchy (of the type as exposed
                    by the metafunction <code class="computeroutput"><span class="identifier">type</span></code>).
                    This function will be called in <span class="emphasis"><em>Qi</em></span> and for
                    <span class="emphasis"><em>Karma</em></span>.
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">transform_attribute</span><span class="special">&lt;</span><span class="identifier">Exposed</span><span class="special">,</span> <span class="identifier">Transformed</span><span class="special">,</span> <span class="identifier">Domain</span><span class="special">&gt;::</span><span class="identifier">post</span><span class="special">(</span><span class="identifier">exposed</span><span class="special">,</span> <span class="identifier">transformed</span><span class="special">)</span></pre>
<p>
                  </p>
                </td>
<td>
                  <p>
                    Do <code class="computeroutput"><span class="identifier">post</span></code>-transformation
                    after the invocation of the right hand side component for <code class="computeroutput"><span class="identifier">rule</span></code> (or the embedded component
                    for <code class="computeroutput"><span class="identifier">attr_cast</span></code>).
                    This takes the original attribute as supplied by the user and
                    the attribute as returned from the right hand side (embedded)
                    component and is expected to propagate the result back into the
                    supplied attribute instance. This function will be called in
                    <span class="emphasis"><em>Qi</em></span> only.
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
</p>
<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">transform_attribute</span><span class="special">&lt;</span><span class="identifier">Exposed</span><span class="special">,</span> <span class="identifier">Transformed</span><span class="special">,</span> <span class="identifier">Domain</span><span class="special">&gt;::</span><span class="identifier">fail</span><span class="special">(</span><span class="identifier">exposed</span><span class="special">)</span></pre>
<p>
                  </p>
                </td>
<td>
                  <p>
                    Handling failing parse operations of the right hand side component
                    for <code class="computeroutput"><span class="identifier">rule</span></code> (or
                    the embedded component for <code class="computeroutput"><span class="identifier">attr_cast</span></code>).
                    This function will be called in <span class="emphasis"><em>Qi</em></span> only.
                  </p>
                </td>
</tr>
</tbody>
</table></div>
<h6>
<a name="spirit.advanced.customize.transform.h6"></a>
          <span class="phrase"><a name="spirit.advanced.customize.transform.predefined_specializations"></a></span><a class="link" href="transform.html#spirit.advanced.customize.transform.predefined_specializations">Predefined
          Specializations</a>
        </h6>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
                  <p>
                    Template parameters
                  </p>
                </th>
<th>
                  <p>
                    Semantics
                  </p>
                </th>
</tr></thead>
<tbody>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">Exposed</span></code>, <code class="computeroutput"><span class="identifier">Transformed</span></code>
                  </p>
                </td>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">type</span></code> evaluates
                    to <code class="computeroutput"><span class="identifier">Transformed</span></code>,
                    <code class="computeroutput"><span class="identifier">pre</span><span class="special">()</span></code>
                    returns a new instance of <code class="computeroutput"><span class="identifier">Transformed</span></code>
                    constructed from the argument of type <code class="computeroutput"><span class="identifier">Exposed</span></code>,
                    <code class="computeroutput"><span class="identifier">post</span><span class="special">()</span></code>
                    assigns <code class="computeroutput"><span class="identifier">transformed</span></code>
                    to <code class="computeroutput"><span class="identifier">exposed</span></code>.
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">Exposed</span><span class="special">&gt;</span></code>,
                    <code class="computeroutput"><span class="identifier">Transformed</span></code>,
                    <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">disable_if</span><span class="special">&lt;</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">Exposed</span><span class="special">&gt;,</span> <span class="identifier">Transformed</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span></code>
                  </p>
                </td>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">type</span></code> evaluates
                    to <code class="computeroutput"><span class="identifier">Transformed</span><span class="special">&amp;</span></code>, <code class="computeroutput"><span class="identifier">pre</span><span class="special">()</span></code> returns a reference to the
                    instance of <code class="computeroutput"><span class="identifier">Transformed</span></code>
                    stored in the passed optional (the argument of type <code class="computeroutput"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">Exposed</span><span class="special">&gt;</span></code>),
                    the optional instance is initialized, if needed. <code class="computeroutput"><span class="identifier">post</span><span class="special">()</span></code>
                    does nothing, <code class="computeroutput"><span class="identifier">fail</span><span class="special">()</span></code> resets the optional (its parameter)
                    instance to the non-initialized state.
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">Exposed</span><span class="special">&amp;</span></code>,
                    <code class="computeroutput"><span class="identifier">Transformed</span></code>
                  </p>
                </td>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">type</span></code> evaluates
                    to <code class="computeroutput"><span class="identifier">Transformed</span></code>,
                    <code class="computeroutput"><span class="identifier">pre</span><span class="special">()</span></code>
                    returns a new instance of <code class="computeroutput"><span class="identifier">Transformed</span></code>
                    constructed from the argument of type <code class="computeroutput"><span class="identifier">Exposed</span></code>,
                    <code class="computeroutput"><span class="identifier">post</span><span class="special">()</span></code>
                    assigns <code class="computeroutput"><span class="identifier">transformed</span></code>
                    to <code class="computeroutput"><span class="identifier">exposed</span></code>.
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">Attrib</span><span class="special">&amp;</span></code>,
                    <code class="computeroutput"><span class="identifier">Attrib</span></code>
                  </p>
                </td>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">type</span></code> evaluates
                    to <code class="computeroutput"><span class="identifier">Attrib</span><span class="special">&amp;</span></code>,
                    <code class="computeroutput"><span class="identifier">pre</span><span class="special">()</span></code>
                    returns it's argument, <code class="computeroutput"><span class="identifier">post</span><span class="special">()</span></code> does nothing.
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">Exposed</span> <span class="keyword">const</span></code>,
                    <code class="computeroutput"><span class="identifier">Transformed</span></code>
                  </p>
                </td>
<td>
                  <p>
                    (usind in <span class="emphasis"><em>Karma</em></span> only) <code class="computeroutput"><span class="identifier">type</span></code>
                    evaluates to <code class="computeroutput"><span class="identifier">Transformed</span></code>,
                    <code class="computeroutput"><span class="identifier">pre</span><span class="special">()</span></code>
                    returns it's argument, <code class="computeroutput"><span class="identifier">post</span><span class="special">()</span></code> is not implemented.
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">Attrib</span> <span class="keyword">const</span><span class="special">&amp;</span></code>, <code class="computeroutput"><span class="identifier">Attrib</span></code>
                  </p>
                </td>
<td>
                  <p>
                    (usind in <span class="emphasis"><em>Karma</em></span> only) <code class="computeroutput"><span class="identifier">type</span></code>
                    evaluates to <code class="computeroutput"><span class="identifier">Attrib</span>
                    <span class="keyword">const</span><span class="special">&amp;</span></code>,
                    <code class="computeroutput"><span class="identifier">pre</span><span class="special">()</span></code>
                    returns it's argument, <code class="computeroutput"><span class="identifier">post</span><span class="special">()</span></code> is not implemented.
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">Attrib</span> <span class="keyword">const</span></code>,
                    <code class="computeroutput"><span class="identifier">Attrib</span></code>
                  </p>
                </td>
<td>
                  <p>
                    (usind in <span class="emphasis"><em>Karma</em></span> only) <code class="computeroutput"><span class="identifier">type</span></code>
                    evaluates to <code class="computeroutput"><span class="identifier">Attrib</span>
                    <span class="keyword">const</span><span class="special">&amp;</span></code>,
                    <code class="computeroutput"><span class="identifier">pre</span><span class="special">()</span></code>
                    returns it's argument, <code class="computeroutput"><span class="identifier">post</span><span class="special">()</span></code> is not implemented.
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">unused_type</span></code>,
                    <code class="computeroutput"><span class="identifier">Attrib</span></code>
                  </p>
                </td>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">type</span></code> evaluates
                    to <code class="computeroutput"><span class="identifier">unused_type</span></code>,
                    <code class="computeroutput"><span class="identifier">pre</span><span class="special">()</span></code>
                    and <code class="computeroutput"><span class="identifier">post</span><span class="special">()</span></code>
                    do nothing.
                  </p>
                </td>
</tr>
<tr>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">Attrib</span></code>, <code class="computeroutput"><span class="identifier">unused_type</span></code>
                  </p>
                </td>
<td>
                  <p>
                    <code class="computeroutput"><span class="identifier">type</span></code> evaluates
                    to <code class="computeroutput"><span class="identifier">unused_type</span></code>,
                    <code class="computeroutput"><span class="identifier">pre</span><span class="special">()</span></code>
                    and <code class="computeroutput"><span class="identifier">post</span><span class="special">()</span></code>
                    do nothing.
                  </p>
                </td>
</tr>
</tbody>
</table></div>
<h6>
<a name="spirit.advanced.customize.transform.h7"></a>
          <span class="phrase"><a name="spirit.advanced.customize.transform.when_to_implement"></a></span><a class="link" href="transform.html#spirit.advanced.customize.transform.when_to_implement">When to
          implement</a>
        </h6>
<p>
          The customization point <code class="computeroutput"><span class="identifier">transform_attribute</span></code>
          needs to be implemented for a specific pair of types whenever the attribute
          type supplied to a <code class="computeroutput"><span class="identifier">rule</span></code>
          or <code class="computeroutput"><span class="identifier">attr_cast</span></code> cannot automatically
          transformed to the attribute type expected by the right hand side of the
          <code class="computeroutput"><span class="identifier">rule</span></code> (embedded component
          of the <code class="computeroutput"><span class="identifier">attr_cast</span></code>) because
          the default implementation as shown above is not applicable. Examples for
          this could be that the type <code class="computeroutput"><span class="identifier">Transformed</span></code>
          is not constructible from the type <code class="computeroutput"><span class="identifier">Exposed</span></code>.
        </p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2001-2011 Joel de Guzman, Hartmut Kaiser<p>
        Distributed under the Boost Software License, Version 1.0. (See accompanying
        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
      </p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="handles_container.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../customize.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="assign_to.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
